#include "LQ_I2C_VL53.h"

/**
 * @brief    测试VL53
 *
 * @param    无
 *
 * @return   无
 *
 * @note     无
 *
 * @example
 *使用的时候需要去修改IIC引脚,修改为SClP15_4和SDAP15_5
 */
void Test_Vl53(void)
{

    char txt[16];
    Display_Init();
    Delay_Ms(200);
    GPIO_LED_Init();
    Display_CLS(U16_BLACK);

    Display_showString(0, 1, "LQ VL53 Test", U16_WHITE, U16_BLUE, 16); // 将txt中 内容显示出来

    IIC_Init();

    unsigned char VL53_STAR = 0x02; // 0x02 连续测量模式    0x01 单次测量模式
    unsigned char dis_buff[2];
    uint16 dis, last_dis = 0;
    /* 开始测距 */
    VL53_Write_Byte(VL53ADDR, VL53L0X_REG_SYSRANGE_START, VL53_STAR);
    while (1)
    {
        /* 获取测量数据 */
        VL53_Read_nByte(VL53ADDR, VL53_REG_DIS, 2, dis_buff);

        /* 转换数据 */
        dis = (dis_buff[0] << 8) | (dis_buff[1]);

        /* 超过2M没有障碍 */
        if (dis > 8000)
        {
            dis = 0;
        }

        if (dis == 20)
        {
            dis = last_dis;
        }
        last_dis = dis;
        sprintf(txt, "DIS %5d mm", dis);
        Display_showString(0, 1, txt, U16_WHITE, U16_BLUE, 16); // 将txt中 内容显示出来
        LED_Ctrl(LED1, RVS);

        Delay_Ms(100);
    }
}

/**
 * @brief    VL53 写1个寄存器
 *
 * @param    dev：    地址
 * @param    reg：    寄存器
 * @param    data：   写入数据
 *
 * @return
 *
 * @note
 *
 * @see
 *
 * @date     2019/4/29 星期一
 */
void VL53_Write_Byte(unsigned char dev, unsigned char reg, unsigned char data)
{
    IIC_WriteByteToSlave(dev << 1, reg, data);
}

/**
 * @brief    VL53 读n个寄存器
 *
 * @param    dev：    地址
 * @param    reg：    寄存器
 * @param    length;  长度
 * @param    data：   指向存放读数据
 *
 * @return
 *
 * @note
 *
 * @see
 *
 * @date     2019/4/29 星期一
 */
void VL53_Read_nByte(unsigned char dev, unsigned char reg, unsigned char length, unsigned char *data)
{
    IIC_ReadMultByteFromSlave(dev << 1, reg, length, data);
}
